//
//  Copyright (C) 2010 Vadim Ushakov
// 
//  This program is free software; you can redistribute it and/or modify it
//  under the terms of the GNU General Public License as published by the Free
//  Software Foundation; either version 2 of the License, or (at your option)
//  any later version.
// 
//  This program is distributed in the hope that it will be useful, but
//  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
//  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
//  for more details.
//  
//  You should have received a copy of the GNU General Public License along
//  with this program; if not, write to the Free Software Foundation, Inc.,
//  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
//

#include "processorLevel.h"
#include "core0/kernelProcessorLevel.h"
#include "processor.h"
#include "pic.h"

void machLowerProcessorLevel(int oldLevel __attribute__((unused)), int newLevel)
{
//	machProcessorDisableInterrupts();

	if ((newLevel >= kernelProcessorLevelIsrMin && newLevel >= kernelProcessorLevelIsrMax) ||
	 (oldLevel >= kernelProcessorLevelIsrMin && oldLevel >= kernelProcessorLevelIsrMax))
	{
		_machPicProcessorLevelLowered(oldLevel, newLevel);
	}

	kernelSetProcessorLevel(newLevel);

//	if (newLevel <= kernelProcessorLevelIsrMax)
//		machProcessorEnableInterrupts();
}

void machRaiseProcessorLevel(int oldLevel __attribute__((unused)), int newLevel)
{
//	machProcessorDisableInterrupts();

	if ((newLevel >= kernelProcessorLevelIsrMin && newLevel >= kernelProcessorLevelIsrMax) ||
	 (oldLevel >= kernelProcessorLevelIsrMin && oldLevel >= kernelProcessorLevelIsrMax))
	{
		_machPicProcessorLevelRaised(oldLevel, newLevel);
	}

	kernelSetProcessorLevel(newLevel);

//	if (newLevel <= kernelProcessorLevelIsrMax)
//		machProcessorEnableInterrupts();
}

